//
//  ContactManager.m
//  HomeWork6-1
//
//  Created by dllo on 15/10/30.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import "ContactManager.h"
#import "Contact.h"

@implementation ContactManager

- (id)init
{
    self = [super init];
    if (self) {
        self.dataDic = [[NSMutableDictionary alloc] init];
    }
    return self;
}




    // 3, 可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
- (void)addContact:(Contact *)contact
{
    if (0 == contact.name.length) {
        return;
    }
    NSString *key = [contact.name substringToIndex:1];
    NSMutableArray *arr = nil;      // 这是个NSMutableArray类型的指针
//    NSMutableArray *arr = [[NSMutableArray alloc] init];   // 数组要这样定义
    if (nil == [self.dataDic objectForKey:key]) {
        // 创建联系人数组
        arr = [NSMutableArray array];
        // 数组添加到字典中
        [self.dataDic setValue:arr forKey:key];
        // 联系人添加到数组中
//        [arr addObject:contact];     // 写到所有判断外面了
    } else {
        arr = [self.dataDic objectForKey:key];
//        [self.dataDic setValue:[self.dataDic objectForKey:key] forKey:key];   // 不用指针用可变数组的话,这样写
//        [arr addObject:contact];     // 写到所有判断外面了
    }
     // 联系人添加到数组中
    [arr addObject:contact];
}










// 4,获取某个分组名称下所有联系人，并且按照姓名升序排列。

- (NSMutableArray *)getSortedNameOfKey:(NSString *)key
{
    // 判断参数的有效性
    if (0 == key.length) {
        return nil;
    }
    NSMutableArray *arr = [self.dataDic objectForKey:key];
    
    [arr sortUsingSelector:@selector(compareByNameOfContact:)];
    
    return arr;
}


// 6,获取所有女性的联系人，并且按照年龄的降序排列。

- (NSMutableArray *)getAllGirlsSortedOfAge
{
    NSMutableArray *arr = [NSMutableArray array];
    for (NSString *key in self.dataDic) {
        // 遍历联系人数组得到联系人
        for (Contact *contact in [self.dataDic objectForKey:key]) {
            if ([contact.sex isEqualToString:@"girl"]) {
                // 若为女性, 则添加进数组中
                [arr addObject:contact];
            }
        }
    }
    [arr sortUsingSelector:@selector(compareByAgeOfContact:)];
    
    return arr;
}








//  5,从通讯录中根据电话号码搜索联系人。
- (NSMutableArray *)searchContactWithPhone:(NSString *)phone
{
    if (0 == phone.length) {
        return nil;
    }
    
    NSMutableArray *arr =[NSMutableArray array];
    
    // 遍历字典得到联系人数组
    for (NSString *key in self.dataDic) {
        // 遍历联系人数组得到联系人
        for (Contact *contact in [self.dataDic objectForKey:key]) {
            if ([contact.phone isEqualToString:phone]) {
                // 若电话匹配,则添加进数组中
                // 防止不同联系人电话相同
                [arr addObject:contact];
            }
        }
    }
    return arr;
}


// 7,根据姓名删除某个联系人。
- (void)deleteContactWithName:(NSString *)name
{
    if (0 == name.length) {
        return;
    }
    // 根据名字获取key(分组名)
    NSString *key = [name substringToIndex:1];
    // 获取分组名对应的数组
    NSMutableArray *arr = [self.dataDic objectForKey:key];
    for (NSInteger i = 0; i < arr.count; i++) {
        if ([[[arr objectAtIndex:i] name] isEqualToString:name]) {
            // 若名字符合则删除
            [arr removeObjectAtIndex:i];
            // 注意,防止漏删
            i--;
        }
    }
    
    
}

    // 8,删除某个分组的全部联系人.

- (void)deleteGroupWithKey:(NSString *)key
{
    if (0 == key) {
        return;
    }
    [self.dataDic removeObjectForKey:key];
}




- (void)allContactInfo
{
    for (NSString *key in self.dataDic) {
        for (Contact *contact in [self.dataDic objectForKey:key]) {
            NSLog(@"%@ %@ %@ %ld", contact.name, contact.sex, contact.phone, contact.age);
        }
    }
}







@end
